package com.bnz.proxy.dyna;


import com.bnz.proxy.impl.UserDaoImpl;
import jdk.nashorn.internal.runtime.regexp.joni.EncodingHelper;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.awt.*;
import java.lang.reflect.Method;

//CGLIB实现动态代理
public class UserDaoCGLIBDynzImpl implements MethodInterceptor {

	//1. 创建代理对象
	public UserDaoImpl createProxy(){
		//1.1 定义Enhancer对象
		Enhancer enhancer = new Enhancer();
		//1.2 指定Enhancer的父类
		enhancer.setSuperclass(UserDaoImpl.class);
		//1.3 指定enhancer的回调
		enhancer.setCallback(this);
		//1.4 创建代理对象
		UserDaoImpl o = (UserDaoImpl) enhancer.create();
		//1.5 返回
		return o;
	}

	//方法调用
	@Override
	public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
		//如果方法是query，则进行安全性检查
		if(method.getName().equals("query")){
			checkSecurity ();
		}
		//调用当前代理对象方法的父类的同名方法
		return methodProxy.invokeSuper(proxy,args);
	}
	private void checkSecurity(){
		System.out.println("【CGLIB动态代理】----》正在进行安全性检查!");
	}
}
